/******************************************************************************
*  author: hnuweiwei@gmail.com
*  version: 1.0
*  file: getopt.cpp
*  date: 2014.05.25
*  description: getopt练习
*  other:
       extern char *optarg;  //选项的参数指针  
       extern int optind,   //下一次调用getopt的时，从optind存储的位置处重新开始检查选项。   
       extern int opterr,  //当opterr=0时，getopt不向stderr输出错误信息。  
       extern int optopt;  //当命令行选项字符不包括在optstring中或者选项缺少必要的参数时，该选项存储在optopt中，getopt返回'？’、  
       int getopt(int argc, char * const argv[], const char *optstring);  getopt处理以'-’开头的命令行参数
	   1.单个字符，表示选项，
·······2.单个字符后接一个冒号：表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
·······3 单个字符后跟两个冒号，表示该选项后必须跟一个参数不能以空格隔开。该参数的指针赋给optarg
******************************************************************************/
#include <unistd.h>  
#include <stdio.h>  
int main(int argc, char * argv[])  
{  
   int aflag=0, bflag=0, cflag=0;  
   int ch;  
printf("optind:%d，opterr：%d\n",optind,opterr);  
printf("--------------------------\n");  
   while ((ch = getopt(argc, argv, "ab:c:de::")) != -1)  
   {  
       printf("optind: %d,argc:%d,argv[%d]:%s\n", optind,argc,optind,argv[optind]);  
       switch (ch) {  
       case 'a':  
           printf("HAVE option: -a\n\n");  
      
           break;  
       case 'b':  
           printf("HAVE option: -b\n");  
           
           printf("The argument of -b is %s\n\n", optarg);  
           break;  
       case 'c':  
           printf("HAVE option: -c\n");  
           printf("The argument of -c is %s\n\n", optarg);  
  
           break;  
   case 'd':  
      printf("HAVE option: -d\n");  
      break;  
   case 'e':  
      printf("HAVE option: -e\n");  
      printf("The argument of -e is %s\n\n", optarg);  
      break;  
  
       case '?':  
           printf("Unknown option: %c\n",(char)optopt);  
           break;  
       }  
   }  
   printf("----------------------------\n");  
   printf("optind=%d,argv[%d]=%s\n",optind,optind,argv[optind]);  
}  

/*
[root@localhost getopt]# ./getopt -a -b bbbb -c ccccc -d eitse fuck
optind:1，opterr：1
--------------------------
optind: 2,argc:9,argv[2]:-b
HAVE option: -a

optind: 4,argc:9,argv[4]:-c
HAVE option: -b
The argument of -b is bbbb

optind: 6,argc:9,argv[6]:-d
HAVE option: -c
The argument of -c is ccccc

optind: 7,argc:9,argv[7]:eitse
HAVE option: -d
----------------------------
optind=7,argv[7]=eitse

*/
